/**
 * Store标准化工具
 * 确保所有Store具有统一的接口和错误处理能力
 */

// 定义默认备用Store，避免循环依赖
const DEFAULT_CACHE_GROUP = {
  CACHE_KEY: 'DEFAULT_RESOURCES_CACHE_KEY',
  CACHE_TIME: 30 * 60 * 1000
};

// 备用资源存储对象实现
const backupResourcesStore = {
  CACHE_GROUP: DEFAULT_CACHE_GROUP,
  loading: false,
  error: null,
  resourceList: [],
  currentResource: null,
  filter: { status: 'all', keyword: '' },
  pagination: { page: 1, size: 10, total: 0, hasMore: true },
  
  // 基本方法
  setLoading(loading) { this.loading = loading; },
  setError(error) { this.error = error; },
  setResourceList(list) { this.resourceList = list || []; },
  setCurrentResource(resource) { this.currentResource = resource; },
  loadResourceList() { console.warn('[store_standardizer] 使用备用resourceStore.loadResourceList'); return Promise.resolve([]); },
  reset() { console.warn('[store_standardizer] 使用备用resourceStore.reset'); }
};

/**
 * 标准化全局Store，确保具有通用属性和方法
 * @param {Object} store - 待标准化的Store对象
 * @param {string} storeName - store名称
 * @returns {Object} 标准化后的Store
 */
function standardizeGlobalStore(store, storeName = 'global') {
  if (!store) {
    console.error(`[store_standardizer] 全局${storeName}为undefined，使用备用Store`);
    return backupResourcesStore;
  }
  
  try {
    // 确保基本属性
    if (!store.reset) {
      console.warn(`Store ${storeName} 缺少reset方法，已自动添加`);
      // 安全创建reset方法，不依赖mobx.action
      store.reset = function() {
        console.log(`[store_standardizer] ${storeName}.reset() 被调用`);
      };
    }
    
    return store;
  } catch (e) {
    console.error(`[store_standardizer] 标准化全局${storeName}失败`, e);
    return backupResourcesStore;
  }
}

/**
 * 标准化模块Store，确保具有基本属性和错误处理
 * @param {Object} store - 待标准化的Store对象
 * @param {string} storeName - store名称，用于错误追踪
 * @returns {Object} 标准化后的Store
 */
function standardizeModuleStore(store, storeName = 'unknown') {
  // 如果store为undefined或null，使用备用store
  if (!store) {
    console.error(`[store_standardizer] ${storeName}为undefined，使用备用Store`);
    return backupResourcesStore;
  }
  
  try {
    // 先进行全局标准化
    store = standardizeGlobalStore(store, storeName);
    
    // 模块特定标准化
    if (store.loading === undefined) {
      console.warn(`模块 ${storeName} store缺少loading字段`);
      store.loading = false;
    }
    
    // 确保store有error字段
    if (store.error === undefined) {
      console.warn(`模块 ${storeName} store缺少error字段`);
      store.error = null;
    }
    
    // 确保store有CACHE_GROUP
    if (!store.CACHE_GROUP) {
      store.CACHE_GROUP = {
        CACHE_KEY: `${storeName.toUpperCase()}_CACHE_KEY`,
        CACHE_TIME: 30 * 60 * 1000 // 默认缓存30分钟
      };
      console.warn(`[store_standardizer] ${storeName}缺少CACHE_GROUP，已添加默认值`);
    }
    
    // 返回标准化的store
    return store;
  } catch (e) {
    console.error(`[store_standardizer] 标准化${storeName}失败`, e);
    return backupResourcesStore;
  }
}

module.exports = {
  standardizeModuleStore,
  standardizeGlobalStore,
  backupResourcesStore // 导出备用Store供其他模块使用
}; 